//
// Created by Administrator on 2023/11/20.
//
#include "iostream"

using namespace std;
const int N = 1e3 + 10;
char a[N], b[N];
int dp[N][N];

int main() {
    int n, m;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        dp[0][i] = i;// 此时只能用添加操作，添加i次
    }
    cin >> m;
    for (int i = 1; i <= m; ++i) {
        cin >> b[i];
        dp[i][0] = i;// 只能用删除操作的情况，删除i次
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
//先考虑删除和插入的操作，后续可能覆盖
// 前者是删除，将a[i]删除，考虑a长i-1的情况
// 后者是插入，a末尾插入b[j]，考虑a长i，但未插入时b长j-1的情况
            dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);


            // 替换的情况
            if (a[i] == b[j])
                dp[i][j] = min(dp[i - 1][j - 1], dp[i][j]);
            else
                dp[i][j] = min(dp[i - 1][j - 1] + 1, dp[i][j]);

        }
    }
    cout << dp[n][m];
}